﻿package fwk.siteManager2 {	

	import flash.display.MovieClip;
	import flash.display.Sprite;
	import flash.display.Stage;
	import flash.events.Event;
	import flash.display.StageAlign;

	
	/**
	 * Classe LoadingDisplayer géré par ContainerLoader.
	 */
	public class LoadingDisplayer extends MovieClip
	{
		
		protected var _stage:Stage;
		private var _fond:Sprite;
				
		private var _percent:Number;
		private var _percentCurrent:Number;
		private var _labelCurrent:String;
		
		
		
		//-----------------------------------------------------------------------
		/**
		 * 
		 * @param	stage
		 */
		function LoadingDisplayer(stage:Stage)
		{
			
			_stage = stage;
			
			// fond qui permet de desactiver les actions utilisateur
			_fond = new Sprite();
			_fond.alpha = 0;
			_fond.graphics.beginFill(0xff0000, 1);
			_fond.graphics.drawRect(0, 0, 50, 50);
			addChildAt(_fond, 0);

		}
		
				
		public function get percent():Number { return _percent; }
		
		public function get percentCurrent():Number { return _percentCurrent; }
		
		public function get labelCurrent():String { return _labelCurrent; }
		
		
		//-----------------------------------------------------------------------
		/**
		 * Lance l'anim d'affichage du loader. Méthode appéle automatiquement par ContainerLoader.
		 */
		public function display():void
		{		
			
			if (_stage.align == StageAlign.TOP_LEFT)
			{
					
				_stage.addEventListener(Event.RESIZE, onResize);
				onResize();
				
			}
			
			_stage.addChild(this);
		}
		
		private function onResize(e:Event = null):void 
		{
			// position
			_fond.width = 1;
			_fond.height = 1;
			_fond.x = 0;
			_fond.y = 0;
			
			x = Math.floor(_stage.stageWidth/2 - width/2);
			y = Math.floor(_stage.stageHeight/2 - height/2);
			
			// position fond
			_fond.x = - x;
			_fond.y = - y;
			
			//taille fond			
			_fond.width = _stage.stageWidth;
			_fond.height = _stage.stageHeight;
		}
		//-----------------------------------------------------------------------
		//------- loading progress
		//-----------------------------------------------------------------------
		/**
		 * Méthode appelé continuellement pendant un chargement.
		 * @param	percent : Correspond au pourcentage total de la liste de chargement en cours (entre 0 et 1).
		 * @param	percentCurrent : Correspond au pourcentage du groupe de ressources en cours de chargement (dans le cas ou plusieurs groupe de ressources sont dans la liste de chargement). (entre 0 et 1).
		 */
		public function setProgress(percent:Number, percentCurrent:Number = NaN):void
		{
			
			_percent 			= percent;
			_percentCurrent 	= percentCurrent;
			
			dispatchEvent(new Event(Event.CHANGE));
		}

		/**
		 * Lance l'animation de fermeture du loader. Méthode appéle automatiquement par ContainerLoader.
		 */
		public function close():void
		{
			onCloseComplete();
		}
		public function onCloseComplete():void
		{
			_stage.removeEventListener(Event.RESIZE, onResize);
			_stage.removeChild(this);
			
			dispatchEvent(new Event(Event.CLOSE));
		}
		
		/**
		 * Dans le cas de plusieurs groupe de ressources en chargement, méthode appelé à chaque fois qu'on passe au prochain groupe de ressource.
		 * @param	txt : Label correspondant au label du groupe de resources en cours de chargement.
		 */
		public function setLabel(txt:String):void
		{			
			_labelCurrent = txt;			
			dispatchEvent(new Event(Event.CHANGE));
		}

	}
}
